#include "gpio_conf.h"
#include "stdio.h"

QueueHandle_t gpio_evt_queue = NULL;    //定义队列句柄
// GPIO中断服务函数
static void IRAM_ATTR gpio_isr_handler(void *arg)
{
    uint32_t gpio_num = (uint32_t) arg;  // 获取入口参数
    xQueueSendFromISR(gpio_evt_queue,&gpio_num,NULL);   //把入口参数值发送到队列
}

void bsp_gpio_init(void)
{
    gpio_set_direction(LED_GPIO, GPIO_MODE_OUTPUT);
    gpio_set_direction(PWR_GPIO, GPIO_MODE_OUTPUT);

    gpio_config_t io0_conf = {
        .intr_type = GPIO_INTR_NEGEDGE,  // 下降沿中断
        .mode = GPIO_MODE_INPUT,         // 输入模式
        .pin_bit_mask = 1 << GPIO_NUM_0, // 选择GPIO0
        .pull_down_en = 0,               // 禁能内部下拉
        .pull_up_en = 1                  // 使能内部上拉
    };
    // 根据上面的配置 设置GPIO
    gpio_config(&io0_conf);
    gpio_install_isr_service(0);        // 创建GPIO中断服务
    gpio_isr_handler_add(GPIO_NUM_0,gpio_isr_handler,(void*)GPIO_NUM_0);
    
    gpio_evt_queue = xQueueCreate(10,sizeof(uint32_t));
}

void led_toggle(void)
{
    gpio_set_level(LED_GPIO, !gpio_get_level(LED_GPIO));
}

void pwr_on(void)
{
    gpio_set_level(PWR_GPIO, 1);
}

void pwr_off(void)
{
    gpio_set_level(PWR_GPIO, 0);
}
